package com.m1.tzolkin.model.util.board;

import java.io.Serializable;

import com.m1.tzolkin.model.exceptions.EndOfGameException;
import com.m1.tzolkin.model.exceptions.NoMovedWorkersException;
import com.m1.tzolkin.model.exceptions.WaitingOperationsException;
import com.m1.tzolkin.model.util.ITurnsCounter;
import com.m1.tzolkin.model.util.player.IPlayer;

/**
 * Un mod�le de plateau muni d'un calendrier, qui a donc
 *  un nombre de tours limit�.
 *  
 * @cons <pre>
 * $DESC$
 *     Un plateau avec les joueurs de players et sans roue muni du calendrier c.
 * $ARGS$
 *     Collection<E> players, Calendar c
 * $PRE$
 *     players != null
 *     players.size() >= 2
 *     c != null
 * $POST$
 *     Ce plateau utilise le calendrier c.
 *     getDay() == 0 </pre>
 *
 */
public interface ITimedBoard<E extends IPlayer, C extends ITurnsCounter> extends IBoard<E>, Serializable {

	// REQUETES
	
	/**
	 * Retourne la date actuelle.
	 */
	int getTurn();
	
	/**
	 * Retourne le num�ro du tour actuel.
	 */
	int getActualTurn();
	
	/**
	 * Retourne true si la partie est termin�e,
	 *  i.e. si on est arriv� � la fin du calendrier utilis�.
	 */
	boolean isFinished();
	
	// COMMANDES
	
	/**
	 * Ach�ve le tour du joueur courant et avance d'un jour si n�cessaire.
	 * Retourne le nouveau joueur courant.
	 */
	@Override
	E endTurn() throws WaitingOperationsException, EndOfGameException, NoMovedWorkersException;
	
}
